#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>

int main()
{
    //创建有名管道
    if(mkfifo("my_fifo",0664) == -1)
    {
        if(errno != EEXIST)
        {
            perror("fail to mkfifo");
            exit(-1);
        }
        else
            printf("文件已存在，可直接使用\n");
    }
    
	//打开有名管道，进行写操作
    int fd = 0;
    fd  = open("my_fifo",O_RDWR);
    if(fd == -1)
    {
        perror("fail to open");
        exit(-1);
    }
    write(fd,"hello world",strlen("hello world"));
    
	//对有名管道进行读操作
    char buf[32] = "";
    if(read(fd,buf,12) == -1)
    {
        perror("fail to read");
        exit(-1);
    }
    printf("buf = %s\n",buf);
    //对有名管道进行读操作，但管道此时无内容，会发生阻塞
    if(read(fd,buf,12) == -1)
    {
        perror("fail to read");
        exit(-1);
    }
    printf("buf = %s\n",buf);
    
    //关闭管道文件
    close(fd);
    return 0;
}